# -*- coding: latin-1 -*-
from django.db import models
from django.contrib.auth.models import *
from datetime import *
from django.contrib.localflavor.ar.forms import *

class NombreManager(models.Manager):
    def get_unknown (self):
        unknown, created = self.get_or_create(nombre='Desconocido')
        return unknown
        

class Tipo_conexion_remota(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()

    def __unicode__(self):
        return self.nombre

    class Meta:
        verbose_name="tipo de conexión remota"
        verbose_name_plural = "tipos de conexiones remotas"

class Tipo_documento(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    
    def __unicode__(self):
        return self.nombre

    class Meta:
        verbose_name="tipo de documento"
        verbose_name_plural = "tipos de documento"

class Estado_civil(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre
    class Meta:
        verbose_name_plural = "estados civiles"
        ordering = ['nombre']

class Condicion_iva(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre
    class Meta:
        verbose_name_plural = "condiciones de iva"
        ordering = ['nombre']

class Modo_de_contacto(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre

class Sexo(models.Model):
    nombre = models.CharField(max_length=50)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre


class Barrio(models.Model):
    objects = NombreManager()
    nombre = models.CharField(max_length=50, unique=True)
    barrio_mas_cercano = models.ForeignKey("Barrio", blank=True, null=True)
    def __unicode__(self):
        return self.nombre
    class Meta:
        ordering = ['nombre']

class Calle(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre
    class Meta:
        ordering = ['nombre']

class Actividad(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre
    class Meta:
        verbose_name_plural = "actividades"
        ordering = ['nombre']

class Pais(models.Model):
    nombre = models.CharField(max_length=50, unique=True)
    objects = NombreManager()
    def __unicode__(self):
        return self.nombre
        
    class Meta:
        verbose_name_plural = "paises"
        ordering = ['nombre']

class Provincia(models.Model):
    nombre = models.CharField(max_length=50)
    objects = NombreManager()
    pais = models.ForeignKey(Pais, null=True)
    def __unicode__(self):
        return self.nombre
    class Meta:
        ordering = ['nombre']
        unique_together = ['pais','nombre']

class Localidad(models.Model):
	nombre = models.CharField(max_length=50)
	provincia = models.ForeignKey(Provincia, null=True)
	localidad_mas_cercana = models.ForeignKey("Localidad", blank=True, null=True)
	codigo_postal = models.IntegerField(null=True)
	objects = NombreManager()
	def __unicode__(self):
		return self.nombre
	class Meta:
		verbose_name_plural = "localidades"
		ordering = ['nombre']
		unique_together = ['provincia','nombre','codigo_postal']


class CodigoPostal(models.Model):
    localidad = models.ForeignKey(Localidad)
    codigo = models.IntegerField()
    
    def __unicode__(self):
        return u"%s - %s" % (self.localidad, self.codigo)

    class Meta:
        verbose_name_plural = "códigos postales"
        ordering = ['codigo']
        unique_together = ['localidad','codigo']


class ContactoManager(models.Manager):
    def get_unknown (self):
        unknown, created = Contacto.objects.get_or_create(apellido='Desconocido')
        return unknown

class Contacto(models.Model):
    objects = ContactoManager()
    user = models.OneToOneField(User, related_name="contacto", null=True, blank=True)

    nombre = models.CharField(max_length=255, null=True,blank=True)
    apellido = models.CharField(max_length=255)
    sexo = models.ForeignKey (Sexo,null=True,blank=True)
    actividad = models.ForeignKey (Actividad, null=True,blank=True)
    grupo = models.ForeignKey('self', blank=True, null=True, related_name="integrantes")
    referencia = models.ForeignKey('self', blank=True, null=True, related_name="referidos")

    email = models.EmailField(null=True,blank=True)
    web = models.URLField(null=True,blank=True)

    fecha_de_nacimiento = models.DateField(null=True,blank=True)
    observaciones = models.TextField(null=True,blank=True)

    estado_civil = models.ForeignKey(Estado_civil, null=True,blank=True)
    nacionalidad = models.ForeignKey(Pais, null=True,blank=True)
    tipo_documento=models.ForeignKey(Tipo_documento, null=True,blank=True)
    documento = models.CharField(max_length=15, null=True,blank=True)
    condicion_iva=models.ForeignKey(Condicion_iva, null=True,blank=True)
    cuit = models.CharField(max_length=15, null=True,blank=True) #,unique=True)
    
    ultimo_reclamo = models.DateField(null=True, blank=True, help_text="De nosotros al cliente")
    lugar_de_entrega = models.CharField(max_length=255, null=True, blank=True, help_text="En donde se entrega mercaderia")
    
#    nro_registro_conductor	 = models.IntegerField(null=True)
#	vto_registro_conductor = models.DateField(null=True)
	
	# para el comercio: cod ingresos brutos,


    # Para asegurados vida:
    # ingresos mensuales
    # caja ahorros
    # anteojos
    # moto
    # zurdo
    

    fecha_de_contacto = models.DateField(null=True,blank=True)
    modo_de_contacto = models.ForeignKey(Modo_de_contacto, null=True, blank=True)

    no_reclamar_nada_antes_de = models.CharField(max_length=35, blank=True, null=True)
    
    foto = models.FileField(upload_to="images/iconos/", null=True, blank=True)

    def __unicode__(self):
        s = self.apellido
        if self.nombre <> "" and self.nombre <> None:
            s = s +  ", " + self.nombre
        return s

    def get_user(self):
        if not self.user_id and self.email <> None:
            key = User.objects.make_random_password(8)
            self.user = User.objects.create_user(self.email, self.email, key)
            self.save()
            c = {
                'contacto': self,
                'key': key
            }
            send_mail_html(email,"Nuevo usuario", 'nuevo_usuario.html', c)
            
        return self.user

    def domicilio_principal(self):
        if self.domicilios.exists():
            return self.domicilios.all()[0]
        else:
            return self.domicilios.create(tipo = 'Principal')
        

    def telefono_principal(self):
        if self.telefonos.exists():
            return self.telefonos.all()[0]
        else:
            return self.telefonos.create(tipo = 'Particular')
        
    class Meta:
        unique_together = (('tipo_documento','documento'),) #(('apellido','nombre')
        ordering = ['apellido', 'nombre']

class Persona_relacionada(models.Model):
    contacto = models.ForeignKey(Contacto, related_name="relaciones")
    # deberia usar otro contacto
    nombre = models.CharField(max_length=100)    
    relacion = models.CharField(max_length=35,null=True,blank=True)
    email = models.EmailField(null=True,blank=True)
    activo = models.BooleanField(default=True)
    
class Conexion_remota(models.Model):
    contacto = models.ForeignKey(Contacto, related_name="conexiones_remotas")
    maquina = models.CharField(max_length=100)
    tipo = models.ForeignKey(Tipo_conexion_remota)
    claves = models.CharField(max_length=100)
    activo = models.BooleanField(default=True)

class Telefono_de_contacto(models.Model):
    tipo = models.CharField(max_length=50, blank=True)
    nro = models.CharField(max_length=50)
    contacto = models.ForeignKey (Contacto, related_name='telefonos',null=True)
    def __unicode__(self):
        return "%s: %s" % (self.tipo, self.nro)
    class Meta:
        verbose_name_plural = "teléfonos de contactos"
        unique_together = ['contacto','tipo']

class Domicilio(models.Model):
    contacto = models.ForeignKey(Contacto, related_name="domicilios",null=True)
    tipo = models.CharField (max_length=255, null=True,blank=True, )
    calle = models.ForeignKey (Calle, null=True,blank=True, )
    nro = models.IntegerField (null=True,blank=True)
    piso = models.CharField (max_length=4, null=True,blank=True)
    departamento = models.CharField (max_length=4, null=True,blank=True)
    codigo_postal = models.CharField(max_length=8, null=True,blank=True)
    barrio = models.ForeignKey (Barrio, null=True,blank=True)
    localidad = models.ForeignKey (Localidad, null=True,blank=True)
    provincia = models.ForeignKey (Provincia, null=True,blank=True)
    pais = models.ForeignKey (Pais, null=True,blank=True)
    otros_datos = models.CharField(max_length=200, null=True,blank=True)
    horario = models.CharField(max_length=100, null=True,blank=True)

    def domicilio(self):
        s = ""
        if self.calle:
            s = "%s" % self.calle.nombre
        if self.nro:
            s = s + " %s" % self.nro 
        if self.piso:
            s = s + " %s" % self.piso 
        if self.departamento:
            s = s + " %s" % self.departamento 
        if self.otros_datos:
            s = s + " %s" % self.otros_datos 
        return s        

    def __unicode__(self):
        s = self.domicilio()
        if self.localidad_id:
            if s <> "":
                s = s + ". "
            s = s + self.localidad.nombre
        if self.provincia_id:
            s = s + " (" + self.provincia.nombre + ")"
        return s
        

    def zona_localidad(self):
        if self.localidad_id == None:
            return 'No se sabe'
        elif self.localidad.localidad_mas_cercana == None:
            return self.localidad.nombre
        else:
            return self.localidad.localidad_mas_cercana.nombre

	def zona(self):
		s = self.zona_localidad(self)
		if self.barrio <> None:
			if self.barrio.barrio_mas_cercano <> None:
				s = s  + ' (' + self.barrio.barrio_mas_cercano.nombre + ')'
			else:
				s = s + ' (' + self.barrio.nombre + ')'
		return s
		
#    class Meta:
#        unique_together = ['contacto','tipo']
